package com.example.optimizaapp.domain.Utilities;

import java.sql.Date;
import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.example.optimizaapp.MainActivity;
import com.example.optimizaapp.domain.Incidente;
import com.example.optimizaapp.domain.ManejadorCliente;
import com.example.optimizaapp.domain.ManejadorIncidente;
import com.example.optimizaapp.domain.ManejadorUsuario;
import com.example.optimizaapp.domain.PrioridadIncidente;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.util.Log;

public class IncidentesByUserService extends AsyncTask<String, Void, String>{
	
	private static final String INCIDENTES_KEY = "incidentes de usuario";
	private static final String DATA_KEY = "data";
	private static final String CLASIFICACION_INCIDENTE = "idClasificacionIncidente";
	private static final String ID_INCIDENTE = "id";
	private static final String ID_TIPO_INCIDENTE = "idTipoIncidente";
	private static final String ID_PRIORIDAD = "idPrioridad";
	private static final String ID_ESTADO = "idEstado";
	private static final String TITULO_INCIDENTE = "titulo";
	private static final String FECHA_INICIO_INCIDENTE = "fechaInicio";
	private static final String DETALLE_INCIDENTE = "detalle";
	private static final String ID_CLIENTE = "idCliente";
	
	private ArrayList <Incidente> incidentes;
	private ManejadorCliente mc = ManejadorCliente.getManejadorCliente();
	private ManejadorUsuario mu = ManejadorUsuario.getManejadorUsuario();
	private ManejadorIncidente mi = ManejadorIncidente.getManejadorIncidente();
	private ProgressDialog progressDialog;
	private MainActivity activity;

	public IncidentesByUserService(ProgressDialog progressDialog, MainActivity activity) {
		super();
		this.progressDialog = progressDialog;
		this.activity = activity;
	}
	
	@Override
	protected void onPreExecute()
	{
		progressDialog.show();
	}

	@Override
	protected String doInBackground(String... params) {
		String returned = Webservices.callWebService(params[0]);
		
		try {
			
			this.incidentes = new ArrayList<Incidente>();
			JSONObject response = new JSONObject(returned);
			Log.d("RESPONSE", returned);
			//String key = INCIDENTES_KEY+ManejadorUsuario.getManejadorUsuario().getUsuarioLogueado().getId();
			JSONArray incidentes = response.getJSONArray(DATA_KEY);
			
			for(int j = 0; j < incidentes.length(); j++){
				 JSONObject jIncidentes = incidentes.getJSONObject(j);
				 Incidente i = new Incidente();
				 				 
				 i.setIdIncidente(jIncidentes.getInt(ID_INCIDENTE));
				 i.setDescripcion(jIncidentes.getString(DETALLE_INCIDENTE));
				 i.setCliente(mc.obtenerClientePorId(jIncidentes.getInt(ID_CLIENTE)));
				 i.setTituloIncidente(jIncidentes.getString(TITULO_INCIDENTE));
				 i.setClasificacionIncidente(mi.clasificacionSegunId(jIncidentes.getInt(CLASIFICACION_INCIDENTE)));
				 i.setPrioridadIncidente(mi.prioridadSegunId(jIncidentes.getInt(ID_PRIORIDAD)));
				 i.setTecnicoAsignado(mu.getUsuarioLogueado());
				 i.setFecha(new Date(Long.parseLong(jIncidentes.getString(FECHA_INICIO_INCIDENTE))));
				 i.setEstadoIncidente(mi.estadoSegunId(jIncidentes.getInt(ID_ESTADO)));
				 i.setSolucion(null);
				 
				 this.incidentes.add(i);
			 }
			
			ManejadorIncidente.getManejadorIncidente().setIncidentes(this.incidentes);
			
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  catch (RuntimeException e){
			e.printStackTrace();

		}
		
		return returned;
	}
	
	protected void onPostExecute(String result) {
		progressDialog.dismiss();
		activity.populateTable();
    }

	
}
